#include "scheduler.h"
#include "component.h"
#include "dieselgenerator.h"
#include "pvsystem.h"
#include <QDebug>

void Scheduler::dispatch(QVector<Component*>& components, double dt, int timeStep) {
    Q_UNUSED(dt);
    Q_UNUSED(timeStep);

    // 1. 计算总负载和总发电量
    double totalLoad = calculateTotalLoad(components);
    double totalGeneration = calculateTotalGeneration(components);

    qDebug() << "时间步" << timeStep << ": 总负载 =" << totalLoad << "kW, 总发电量 =" << totalGeneration << "kW";

    // 2. 平衡发电和负载
    // 这是一个简化的调度逻辑，实际项目会有更复杂的算法
    if (totalGeneration > totalLoad) {
        qDebug() << "警告: 发电过剩! 减少柴油发电机输出";
        // 这里可以添加减少发电的逻辑
    } else if (totalGeneration < totalLoad) {
        qDebug() << "警告: 电力不足! 增加柴油发电机输出";
        // 这里可以增加发电的逻辑
    } else {
        qDebug() << "电力平衡状态良好";
    }
}

double Scheduler::calculateTotalLoad(const QVector<Component*>& components) {
    double total = 0.0;
    for (Component* comp : components) {
        if (comp->getPower() < 0) {
            total += std::abs(comp->getPower());
        }
    }
    return total;
}

double Scheduler::calculateTotalGeneration(const QVector<Component*>& components) {
    double total = 0.0;
    for (Component* comp : components) {
        if (comp->getPower() > 0) {
            total += comp->getPower();
        }
    }
    return total;
}
